using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ServiceModel;
using IGM.DataProvider.Entites;

namespace IGM.WcfService
{
    [ServiceContract]
    public interface IDomainService
    {
        #region IGroup

        [OperationContract]
        ObservableCollection<DataManagement> GetGroups();

        [OperationContract]
        void InsertGroups(List<DataManagement> entities);

        [OperationContract]
        void UpdateGroups(List<DataManagement> entities);

        [OperationContract]
        void DeleteGroups(List<DataManagement> entities);

        #endregion

        #region IGroupLeturer

        [OperationContract]
        ObservableCollection<DataManagement> GetGroupLeturers();

        [OperationContract]
        void InsertGroupLeturers(List<DataManagement> entities);

        [OperationContract]
        void UpdateGroupLeturers(List<DataManagement> entities);

        [OperationContract]
        void DeleteGroupLeturers(List<DataManagement> entities);

        #endregion

        #region IGroupStudent

        [OperationContract]
        ObservableCollection<DataManagement> GetGroupStudents();

        [OperationContract]
        void InsertGroupStudents(List<DataManagement> entities);

        [OperationContract]
        void UpdateGroupStudents(List<DataManagement> entities);

        [OperationContract]
        void DeleteGroupStudents(List<DataManagement> entities);

        #endregion

        #region IKindIntern

        [OperationContract]
        ObservableCollection<DataManagement> GetKindInterns();

        [OperationContract]
        void InsertKindInterns(List<DataManagement> entities);

        [OperationContract]
        void UpdateKindInterns(List<DataManagement> entities);

        [OperationContract]
        void DeleteKindInterns(List<DataManagement> entities);

        #endregion

        #region IKindMark

        [OperationContract]
        ObservableCollection<DataManagement> GetKindMarks();

        [OperationContract]
        void InsertKindMarks(List<DataManagement> entities);

        [OperationContract]
        void UpdateKindMarks(List<DataManagement> entities);

        [OperationContract]
        void DeleteKindMarks(List<DataManagement> entities);

        #endregion

        #region ILastModifyData

        [OperationContract]
        ObservableCollection<DataManagement> GetLastModifyData();

        [OperationContract]
        void InsertLastModifyData(List<DataManagement> entities);

        [OperationContract]
        void UpdateLastModifyData(List<DataManagement> entities);

        [OperationContract]
        void DeleteLastModifyData(List<DataManagement> entities);

        #endregion

        #region ILecturer

        [OperationContract]
        ObservableCollection<DataManagement> GetLecturers();

        [OperationContract]
        ObservableCollection<DataManagement> GetLecturersByMajorId(int majorId);

        [OperationContract]
        void InsertLecturers(List<DataManagement> entities);

        [OperationContract]
        void UpdateLecturers(List<DataManagement> entities);

        [OperationContract]
        void DeleteLecturers(List<DataManagement> entities);

        #endregion

        #region IMajor

        [OperationContract]
        ObservableCollection<DataManagement> GetMajors();

        [OperationContract]
        void InsertMajors(List<DataManagement> entities);

        [OperationContract]
        void UpdateMajors(List<DataManagement> entities);

        [OperationContract]
        void DeleteMajors(List<DataManagement> entities);

        #endregion

        #region IStudent

        [OperationContract]
        ObservableCollection<DataManagement> GetStudents();
        
        [OperationContract]
        ObservableCollection<DataManagement> GetStudentsByMajorId(int majorId);

        [OperationContract]
        void InsertStudents(List<DataManagement> entities);

        [OperationContract]
        void UpdateStudents(List<DataManagement> entities);

        [OperationContract]
        void DeleteStudents(List<DataManagement> entities);

        #endregion

        #region IStudentLeturer

        [OperationContract]
        ObservableCollection<DataManagement> GetStudentLeturers();

        [OperationContract]
        void InsertStudentLeturers(List<DataManagement> entities);

        [OperationContract]
        void UpdateStudentLeturers(List<DataManagement> entities);

        [OperationContract]
        void DeleteStudentLeturers(List<DataManagement> entities);

        #endregion

        #region IStudentMark

        [OperationContract]
        ObservableCollection<DataManagement> GetStudentMarks();

        [OperationContract]
        ObservableCollection<DataManagement> GetStudentMarksByKindMarkId(int kindmarkId);

        [OperationContract]
        void InsertStudentMarks(List<DataManagement> entities);

        [OperationContract]
        void UpdateStudentMarks(List<DataManagement> entities);

        [OperationContract]
        void DeleteStudentMarks(List<DataManagement> entities);

        #endregion

        #region ISubcommittee

        [OperationContract]
        ObservableCollection<DataManagement> GetSubcommittees();

        [OperationContract]
        void InsertSubcommittees(List<DataManagement> entities);

        [OperationContract]
        void UpdateSubcommittees(List<DataManagement> entities);

        [OperationContract]
        void DeleteSubcommittees(List<DataManagement> entities);

        #endregion

        #region ISubcommitteeLecture

        [OperationContract]
        ObservableCollection<DataManagement> GetSubcommitteeLectures();

        [OperationContract]
        void InsertSubcommitteeLectures(List<DataManagement> entities);

        [OperationContract]
        void UpdateSubcommitteeLectures(List<DataManagement> entities);

        [OperationContract]
        void DeleteSubcommitteeLectures(List<DataManagement> entities);

        #endregion

        #region IUser

        [OperationContract]
        ObservableCollection<DataManagement> GetUsers();

        [OperationContract]
        void InsertUsers(List<DataManagement> entities);

        [OperationContract]
        void UpdateUsers(List<DataManagement> entities);

        [OperationContract]
        void DeleteUsers(List<DataManagement> entities);

        #endregion
    }
}